///*******************************************************************************
// * Copyright (c) 2009 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// * IBM Corporation - initial API and implementation
// ******************************************************************************/
//
//package org.eclipse.ui.tests.services;
//
//import org.eclipse.core.expressions.EvaluationResult;
//import org.eclipse.core.expressions.Expression;
//import org.eclipse.core.expressions.ExpressionInfo;
//import org.eclipse.core.expressions.IEvaluationContext;
//import org.eclipse.core.resources.IFile;
//import org.eclipse.core.resources.IProject;
//import org.eclipse.core.runtime.CoreException;
//import org.eclipse.jface.util.IPropertyChangeListener;
//import org.eclipse.jface.util.PropertyChangeEvent;
//import org.eclipse.ui.IEditorInput;
//import org.eclipse.ui.IEditorPart;
//import org.eclipse.ui.IReusableEditor;
//import org.eclipse.ui.ISources;
//import org.eclipse.ui.IWorkbenchPage;
//import org.eclipse.ui.IWorkbenchWindow;
//import org.eclipse.ui.ide.IDE;
//import org.eclipse.ui.internal.util.Util;
//import org.eclipse.ui.part.FileEditorInput;
//import org.eclipse.ui.services.IEvaluationService;
//import org.eclipse.ui.tests.api.MockReusableEditorPart;
//import org.eclipse.ui.tests.harness.util.FileUtil;
//import org.eclipse.ui.tests.harness.util.UITestCase;
//
///**
// * @since 3.5
// *
// */
//public class EditorSourceTest extends UITestCase {
//
// private static class MyEval implements IPropertyChangeListener {
// public int count = 0;
// public boolean currentValue;
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org
// * .eclipse.jface.util.PropertyChangeEvent)
// */
// public void propertyChange(PropertyChangeEvent event) {
// count++;
// if (event.getProperty() == IEvaluationService.RESULT
// && event.getNewValue() instanceof Boolean) {
// currentValue = ((Boolean) event.getNewValue()).booleanValue();
// }
// }
// }
//
// private static class InputExpression extends Expression {
// public IEditorInput editorInput;
// public Object stateInput;
//
// public InputExpression(IEditorInput i) {
// editorInput = i;
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.core.expressions.Expression#collectExpressionInfo(org
// * .eclipse.core.expressions.ExpressionInfo)
// */
// public void collectExpressionInfo(ExpressionInfo info) {
// info.addVariableNameAccess(ISources.ACTIVE_EDITOR_INPUT_NAME);
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.core.expressions.Expression#evaluate(org.eclipse.core
// * .expressions.IEvaluationContext)
// */
// public EvaluationResult evaluate(IEvaluationContext context)
// throws CoreException {
// stateInput = context.getVariable(ISources.ACTIVE_EDITOR_INPUT_NAME);
// return EvaluationResult.valueOf(Util
// .equals(stateInput, editorInput));
// }
//
// }
//
// private IProject project;
// private IFile test1;
// private IFile test2;
//
// public EditorSourceTest(String testName) {
// super(testName);
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.ui.tests.harness.util.UITestCase#doSetUp()
// */
// protected void doSetUp() throws Exception {
// super.doSetUp();
// project = FileUtil.createProject("testActiveEditor");
// test1 = FileUtil.createFile("test1.mockr1", project);
// test2 = FileUtil.createFile("test2.mockr1", project);
// }
//
// public void testActiveEditor() throws Exception {
// IWorkbenchWindow window = openTestWindow();
// IEvaluationService es = (IEvaluationService) window
// .getService(IEvaluationService.class);
// IWorkbenchPage page = window.getActivePage();
// IEditorPart editor1 = IDE.openEditor(page, test1, true);
// assertNotNull(editor1);
// assertEquals(MockReusableEditorPart.ID1, editor1.getSite().getId());
// IEditorPart editor2 = IDE.openEditor(page, test2, true);
// assertNotNull(editor2);
//
// FileEditorInput input1 = new FileEditorInput(test1);
// FileEditorInput input2 = new FileEditorInput(test2);
// MyEval listener = new MyEval();
// InputExpression expr = new InputExpression(input1);
// es.addEvaluationListener(expr, listener, IEvaluationService.RESULT);
// assertFalse(listener.currentValue);
// assertEquals(1, listener.count);
// assertEquals(input2, expr.stateInput);
//
// IEditorPart foundEditor = page.findEditor(input1);
// assertNotNull(foundEditor);
// assertEquals(editor1, foundEditor);
//
// page.activate(editor1);
// processEvents();
//
// assertEquals(2, listener.count);
// assertEquals(input1, expr.stateInput);
// assertTrue(listener.currentValue);
//
// assertTrue(editor1.getClass().getName(),
// editor1 instanceof IReusableEditor);
// IReusableEditor reditor1 = (IReusableEditor) editor1;
// reditor1.setInput(input2);
//
// assertFalse(listener.currentValue);
// assertEquals(3, listener.count);
// assertEquals(input2, expr.stateInput);
//
// reditor1.setInput(input1);
// assertEquals(4, listener.count);
// assertEquals(input1, expr.stateInput);
// assertTrue(listener.currentValue);
//
// reditor1.setInput(input2);
//
// assertFalse(listener.currentValue);
// assertEquals(5, listener.count);
// assertEquals(input2, expr.stateInput);
//
// page.activate(editor2);
// processEvents();
// assertFalse(listener.currentValue);
// assertEquals(5, listener.count);
// assertEquals(input2, expr.stateInput);
//
// reditor1.setInput(input1);
// assertFalse(listener.currentValue);
// assertEquals(5, listener.count);
// assertEquals(input2, expr.stateInput);
//
// page.activate(editor1);
// processEvents();
//
// assertEquals(6, listener.count);
// assertEquals(input1, expr.stateInput);
// assertTrue(listener.currentValue);
// }
//}